//主要是用于设置一些模拟（mock）的API接口，以便在前端开发中模拟后端返回的数据，
//而不必依赖于真实后端接口的开发进度。这样前端开发人员看独立地进行开发与测试

//引入依赖
const Mock = require('mockjs')//引入mockjs库，用于生成随机数据
const { deepClone } = require('../utils')//引入一个深度克隆函数，用于复制对象
const { asyncRoutes, constantRoutes } = require('./routes.js')//引入路由配置，通常这些路由配置会定义前端应用的所有页面和组件的映射关系
//定义路由
const routes = deepClone([...constantRoutes, ...asyncRoutes])//使用deepClone深度克隆constantRoutes和asyncRoutes，得到一个新的routes数组，

const roles = [//定义了三个角色，admin、editor、vistor，以及他们可以访问的路由
  {
    key: 'admin',
    name: 'admin',
    description: 'Super Administrator. Have access to view all pages.',
    routes: routes
  },
  {
    key: 'editor',
    name: 'editor',
    description: 'Normal Editor. Can see all pages except permission page',
    routes: routes.filter(i => i.path !== '/permission')// just a mock
  },
  {
    key: 'visitor',
    name: 'visitor',
    description: 'Just a visitor. Can only see the home page and the document page',
    routes: [{
      path: '',
      redirect: 'dashboard',
      children: [
        {
          path: 'dashboard',
          name: 'Dashboard',
          meta: { title: 'dashboard', icon: 'dashboard' }
        }
      ]
    }]
  }
]
//定义模拟API，定义了多个API接口，每个接口都有url,type,response属性
module.exports = [
  // mock get all routes form server，获取所有路由
  {
    url: '/vue-element-admin/routes',//url 接口的路径
    type: 'get',// type 请求的方法（GET,POST,PUT,DELETE）
    response: _ => {//response 当该接口被请求时，返回的数据
      return {
        code: 20000,
        data: routes
      }
    }
  },

  // mock get all roles form server，获取所有角色
  {
    url: '/vue-element-admin/roles',
    type: 'get',
    response: _ => {
      return {
        code: 20000,
        data: roles
      }
    }
  },

  // add role，添加角色
  {
    url: '/vue-element-admin/role',
    type: 'post',
    response: {//返回一个包含随机整数的key
      code: 20000,
      data: {
        key: Mock.mock('@integer(300, 5000)')
      }
    }
  },

  // update role，更新角色
  {
    url: '/vue-element-admin/role/[A-Za-z0-9]',
    type: 'put',
    response: {//返回一个固定格式的响应，表示更新成功
      code: 20000,
      data: {
        status: 'success'
      }
    }
  },

  // delete role，删除角色
  {
    url: '/vue-element-admin/role/[A-Za-z0-9]',
    type: 'delete',
    response: {//返回一个固定格式的响应，表示删除成功
      code: 20000,
      data: {
        status: 'success'
      }
    }
  }
]
